[自動化]GitHubで管理しているドキュメントをGitBookでPDF化し、Backlogの共有フォルダにアップロードする
モバイルアプリサービス部の五十嵐です。
私が担当するプロジェクトでは、GitHubでドキュメントを管理し、それをGitBookでPDFファイルにしてお客様へ提供しています。GitBookを使ってGitHubのドキュメントをPDFにする方法は、以前、藤村が紹介しました。
GitBook 環境を準備してみる | Developers.IO
私もこの方法で何度かPDFファイルを作っていたのですが、環境準備さえしてしまえば数コマンド打つだけ・・・とはいえ数コマンドを覚えておくのも面倒ですしゴミファイルを消したりとか色々やることがあります。そこで、この一連の操作をスクリプト化しました。また、PDFファイルはBacklogの共有ファイルにてお客様へ提供しているので、その作業も合わせてスクリプト化しました。
スクリプトは、将来的にはGitHubのMerge PRイベントをトリガーにJenkinsなどで動かすことを想定し、シェルスクリプトで書いています。とりあえず今回はそこまで行ってないので、ローカル環境で手動実行するまでです。
GitHubで管理しているドキュメントをGitBookでPDF化
GitBookのコマンドツールのインストールが完了しているものとします。 以下のスクリプトを保存し、実行権限を付与します。
gitbook.sh
#!/bin/sh | |
# GitHubのリポジトリパス | |
REPOSITORY_PATH=git@github.com:xxx/yyy | |
# リポジトリ名 | |
REPOSITORY_NAME=yyy | |
# 出力ファイル名 | |
OUTPUT_FILENAME=SPEC.pdf | |
# リポジトリをクローン | |
git clone $REPOSITORY_PATH | |
# Gitbookを使ってPDFを作成 | |
gitbook pdf ./$REPOSITORY_NAME $OUTPUT_FILENAME | |
# BackLogにファイルアップロード | |
#(別のシェルを呼ぶ)引数:アップロードするファイル名 | |
./backlog_upload.sh $OUTPUT_FILENAME | |
# リポジトリのクローンを削除 | |
rm -rf $REPOSITORY_NAME | |
# 出力ファイルを削除 | |
rm $OUTPUT_FILENAME |
やっていることはコメントとコマンドに書いてある通りなので説明は不要かと思います。
Backlogの共有フォルダにアップロードする
実はこちらの方が少し苦戦しました。BacklogにAPIが提供されているのは知っていたので、その中にファイルアップロードもあるだろうと考えていたのですが、ありませんでした。で、もう少し調べたところ、Backlogの共有ファイルは、実はWebDAVに対応していることが分かりました。
Windows 7 の設定 | Backlogを使いこなそう | Backlog [バックログ]
これを使って、MacにWebDAVの共有フォルダをマウントして、ファイルコピーすることにしたのが以下のスクリプトです。
backlog_upload.sh
#!/bin/sh | |
# BacklogのWebDAVパス | |
WEBDAV_SERVER=https://xxxx.backlog.jp/dav/XXXX/ | |
# マウントディレクトリ | |
MOUNT_DIR=/Volumes/XXXX | |
# アップロードディレクトリ | |
UPLOAD_DIR=/仕様書 | |
# WebDAV接続 | |
mkdir $MOUNT_DIR | |
mount -t webdav $WEBDAV_SERVER $MOUNT_DIR | |
# ファイルをコピーする | |
cp $1 $MOUNT_DIR$UPLOAD_DIR/$1 | |
# WebDAV接続解除 | |
umount $MOUNT_DIR |
これも見ての通りですね。WebDAVの認証情報はキーチェーンで保存されているものを使っているので、実行時に以下のダイアログが表示されます。「常に許可」を選択してしまえば初回だけです。
Jenkins(Linux)に移植するときは、認証情報は /etc/davfs2/secrets
とかに保存しておけば良いのかな?今度試してみます。
ひとつ小さな気づきですが、WebDAVファイルサーバにcpコマンドでファイルをコピーした時、ファイルは正常にコピーされるのですが、次のエラーが出力されました。
cp: SPEC.pdf: could not copy extended attributes to /Volumes/XXXX/...: Operation not permitted
調べたところ、以下のリンクに答えが書いてありました。
What isn't copied when Mac OS X's cp complains "extended attributes not copied"? - Quora
ファイルシステムの違いで、Macのファイルシステムが持つメタ情報がWebDAVファイルサーバでは欠けてしまうということの警告らしいです。今回は影響ないですが、そういうこともあるんだ、という発見でした。
次のステップ
ドキュメントに不可欠なのが「変更履歴」ですね。GitHubで管理しているのだからIssueやPRをまとめれば良いだけのはず。でも手動でやるのは手間がかかる。ということで探したらあるっぽいので、これを含めて自動化するというQiitaの記事を所望したら私が書くことになったので次はこれにチャレンジしてみようと思います。